﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LarDosIdosos.NewAcessaDados;
using MySql.Data.MySqlClient;

namespace LarDosIdosos.Business.Model
{
    public class DBProduto
    {
        private string _stringConnection;

        public DBProduto(string stringDeConexaoComBanco)
        {
            _stringConnection = stringDeConexaoComBanco;
        }

        public List<Produto> SelectList(string sql)
        {
            AcessaDados conn = new AcessaDados(_stringConnection);
            try
            {
                conn.OpenConnection();
                var reader = conn.ExecuteDataReader(sql);
                if (reader.HasRows)
                {
                    return MontaListaProduto(reader);
                }
                return null;
            }
            catch (Exception ex)
            {
                throw new Exception("Não foi possível consultar o tipo documento", ex);
            }
            finally
            {
                conn.CloseConection();
            }
        }

        private List<Produto> MontaListaProduto(MySqlDataReader reader)
        {
            List<Produto> listProduto = new List<Produto>();
            while (reader.Read())
            {
                listProduto.Add(MontaProduto(reader));
            }
            return listProduto.OrderBy(p => p.Nome_Produto).ToList();
        }

        private Produto MontaProduto(MySqlDataReader reader)
        {
            return new Produto { Codigo_Produto = Convert.ToInt32(reader["Codigo_Produto"]), Nome_Produto = reader["Nome_Produto"].ToString(), Tipo_Produto = ObtemTipoProduto(Convert.ToInt32(reader["Tipo_Produto_Codigo_Tipo_Produto"])), Unidade_De_Medida = ObtemUnidadeDeMedida(Convert.ToInt32(reader["Unidade_De_Medida_Codigo_Unidade_De_Medida"])) };
        }

        private UnidadeDeMedida ObtemUnidadeDeMedida(int codigo_unidade_de_medida)
        {
            DBUnidadeDeMedida dbUnidadeDeMedida = new DBUnidadeDeMedida(_stringConnection);
            return dbUnidadeDeMedida.BuscaUnidadeDeMedida(codigo_unidade_de_medida);
        }

        private TipoProduto ObtemTipoProduto(int Codigo_Tipo_Produto)
        {
            DBTipoProduto dbTipoProduto = new DBTipoProduto(_stringConnection);
            return dbTipoProduto.Select(Codigo_Tipo_Produto);
        }
    }
}
